/**
 * 数据适配器
 * 用于处理前后端数据格式差异
 */

/**
 * 适配用户信息字段
 * 后端：nickName, Introduction
 * 前端：nickname, introduction
 * @param {Object} user - 后端用户数据
 * @returns {Object} - 适配后的用户数据
 */
export const adaptUserInfo = (user) => {
	if (!user) return null;
	
	return {
		...user,
		// 统一为小写字段名
		nickname: user.nickName || user.nickname || '',
		introduction: user.Introduction || user.introduction || '',
		// phoneNumber转为字符串
		phoneNumber: String(user.phoneNumber || '')
	};
};

/**
 * 适配帖子数据
 * 处理图片字段：后端是JSON字符串，前端是数组
 * 处理时间字段：后端是ISO字符串，前端需要时间戳
 * @param {Object} post - 后端帖子数据
 * @returns {Object} - 适配后的帖子数据
 */
export const adaptPost = (post) => {
	if (!post) return null;
	
	// 处理图片字段
	let images = [];
	if (post.image) {
		if (typeof post.image === 'string') {
			try {
				// 尝试解析JSON字符串
				images = JSON.parse(post.image);
			} catch (e) {
				// 如果解析失败，尝试按逗号分割
				images = post.image.split(',').filter(img => img.trim());
			}
		} else if (Array.isArray(post.image)) {
			images = post.image;
		}
	}
	
	return {
		...post,
		image: images,
		// 如果需要时间戳，转换createTime
		createTime: post.createTime ? new Date(post.createTime).getTime() : Date.now(),
		updateTime: post.updateTime ? new Date(post.updateTime).getTime() : Date.now()
	};
};

/**
 * 适配帖子列表
 * @param {Array} posts - 后端帖子列表
 * @returns {Array} - 适配后的帖子列表
 */
export const adaptPostList = (posts) => {
	if (!Array.isArray(posts)) return [];
	return posts.map(post => adaptPost(post));
};

/**
 * 发布帖子时转换数据
 * 前端传数组，后端需要JSON字符串
 * @param {Object} postData - 前端帖子数据
 * @returns {Object} - 适配后的帖子数据
 */
export const adaptPostForSubmit = (postData) => {
	if (!postData) return null;
	
	const data = { ...postData };
	
	// 处理图片字段：数组转为JSON字符串
	if (Array.isArray(data.image)) {
		data.image = JSON.stringify(data.image);
	}
	
	return data;
};

/**
 * 适配板块数据
 * 后端：description, sortOrder
 * 前端：plateDesc, sort
 * @param {Object} plate - 后端板块数据
 * @returns {Object} - 适配后的板块数据
 */
export const adaptPlate = (plate) => {
	if (!plate) return null;
	
	return {
		...plate,
		plateDesc: plate.description || plate.plateDesc || '',
		sort: plate.sortOrder !== undefined ? plate.sortOrder : plate.sort,
		// 保留原字段
		description: plate.description,
		sortOrder: plate.sortOrder
	};
};

/**
 * 适配板块列表
 * @param {Array} plates - 后端板块列表
 * @returns {Array} - 适配后的板块列表
 */
export const adaptPlateList = (plates) => {
	if (!Array.isArray(plates)) return [];
	return plates.map(plate => adaptPlate(plate));
};

/**
 * 适配评论数据
 * 处理时间字段
 * @param {Object} comment - 后端评论数据
 * @returns {Object} - 适配后的评论数据
 */
export const adaptComment = (comment) => {
	if (!comment) return null;
	
	return {
		...comment,
		createTime: comment.createTime ? new Date(comment.createTime).getTime() : Date.now()
	};
};

/**
 * 适配评论列表
 * @param {Array} comments - 后端评论列表
 * @returns {Array} - 适配后的评论列表
 */
export const adaptCommentList = (comments) => {
	if (!Array.isArray(comments)) return [];
	return comments.map(comment => adaptComment(comment));
};

/**
 * 发布评论时转换数据
 * @param {Object} commentData - 前端评论数据
 * @returns {Object} - 适配后的评论数据
 */
export const adaptCommentForSubmit = (commentData) => {
	// 评论数据目前不需要特殊转换
	return { ...commentData };
};

export default {
	adaptUserInfo,
	adaptPost,
	adaptPostList,
	adaptPostForSubmit,
	adaptPlate,
	adaptPlateList,
	adaptComment,
	adaptCommentList,
	adaptCommentForSubmit
};

